package com.delivery.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;

public class GraphicUtils {

	/***
	 * 加载本地图片
	 * 
	 * @param context
	 *            ：主运行函数实例
	 * @param bitAdress
	 *            ：图片地址，一般指向R下的drawable目录
	 * @return
	 */

	public final Bitmap CreatImage(Context context, int bitAdress) {

		Bitmap bitmaptemp = null;

		bitmaptemp = BitmapFactory.decodeResource(context.getResources(),
				bitAdress);

		return bitmaptemp;

	}

	/***
	 * 加载本地图片
	 * 
	 * @param url
	 *            ：图片地址，手机目录
	 * @return
	 * @throws IOException
	 */

	public final static Bitmap CreateBitmapFromRemote(String url){
		try {
			if (url == "")
				return null;
			URL imageURL = new URL(url);
			HttpURLConnection connection = (HttpURLConnection) imageURL.openConnection();
			connection.setDoInput(true);
			connection.connect();
			InputStream input = connection.getInputStream();
			return BitmapFactory.decodeStream(input); // /把流转化为Bitmap图片
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/***
	 * 加载本地图片
	 * 
	 * @param url
	 *            ：图片地址，手机目录
	 * @return
	 * @throws IOException
	 */

	public final static Bitmap CreateBitmapFromLocal(String url){
		try {
			if (url == "")
				return null;
			File file = new File(url);
			FileInputStream input = new FileInputStream(file);
			return BitmapFactory.decodeStream(input); // /把流转化为Bitmap图片
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}


	// 图片平均分割方法，将大图平均分割为N行N列，方便用户使用

	/***
	 * 图片分割
	 * 
	 * @param g
	 *            ：画布
	 * @param paint
	 *            ：画笔
	 * @param imgBit
	 *            ：图片
	 *@param x
	 *            ：X轴起点坐标
	 * @param y
	 *            ：Y轴起点坐标
	 * @param w
	 *            ：单一图片的宽度
	 * @param h
	 *            ：单一图片的高度
	 * @param line
	 *            ：第几列
	 * @param row
	 *            ：第几行
	 */

	public final void cuteImage(Canvas g, Paint paint, Bitmap imgBit, int x,

	int y, int w, int h, int line, int row) {

		g.clipRect(x, y, x + w, h + y);

		g.drawBitmap(imgBit, x - line * w, y - row * h, paint);

		g.restore();

	}

	// 图片缩放，对当前图片进行缩放处理

	/***
	 * 
	 * 图片的缩放方法 * @param bgimage ：源图片资源
	 * 
	 * @param newWidth
	 *            ：缩放后宽度
	 * @param newHeight
	 *            ：缩放后高度
	 * @return
	 */

	public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {

		// 获取这个图片的宽和高
		if (bgimage == null) {
			return null;
		}
		int width = bgimage.getWidth();

		int height = bgimage.getHeight();

		// 创建操作图片用的matrix对象

		Matrix matrix = new Matrix();

		// 计算缩放率，新尺寸除原始尺寸

		float scaleWidth = ((float) newWidth) / width;

		float scaleHeight = ((float) newHeight) / height;

		// 缩放图片动作

		matrix.postScale(scaleWidth, scaleHeight);

		Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height,

		matrix, true);

		return bitmap;

	}

	// 4.绘制带有边框的文字，一般在游戏中起文字的美化作用

	/**
	 * 绘制带有边框的文字
	 * 
	 * @param strMsg
	 *            ：绘制内容
	 * @param g
	 *            ：画布
	 * @param paint
	 *            ：画笔
	 * @param setx
	 *            ：X轴起始坐标
	 * @param sety
	 *            ：Y轴的起始坐标
	 * @param fg
	 *            ：前景色
	 * @param bg
	 *            ：背景色
	 */

	public void drawText(String strMsg, Canvas g, Paint paint, int setx,

	int sety, int fg, int bg) {

		paint.setColor(bg);

		g.drawText(strMsg, setx + 1, sety, paint);

		g.drawText(strMsg, setx, sety - 1, paint);

		g.drawText(strMsg, setx, sety + 1, paint);

		g.drawText(strMsg, setx - 1, sety, paint);

		paint.setColor(fg);

		g.drawText(strMsg, setx, sety, paint);

		g.restore();

	}
}
